/**
 * 用户数据模拟模块
 * 提供用户管理和登录验证的模拟数据
 */

// 模拟用户数据
const MockUserData = (function () {
    // 用户数据
    const users = [
        {
            id: 1,
            username: 'admin',
            name: '管理员',
            password: 'admin',
            role: 'ADMIN',
            lastLoginTime: Date.now() - 86400000 // 一天前
        },
        {
            id: 2,
            username: 'operator',
            name: '操作员',
            password: 'operator',
            role: 'OPERATOR',
            lastLoginTime: Date.now() - 172800000 // 两天前
        },
        {
            id: 3,
            username: 'viewer',
            name: '查看员',
            password: 'viewer',
            role: 'VIEWER',
            lastLoginTime: Date.now() - 259200000 // 三天前
        }
    ];

    /**
     * 获取所有用户（不返回密码）
     * @returns {Array} 用户列表
     */
    function getAllUsers() {
        return users.map(user => {
            // 创建用户对象的副本，不包含密码
            const { password, ...userWithoutPassword } = user;
            return { ...userWithoutPassword, password: '******' };
        });
    }

    /**
     * 根据ID获取用户
     * @param {number} id 用户ID
     * @returns {Object|null} 用户对象或null
     */
    function getUserById(id) {
        const user = users.find(u => u.id === Number(id));
        if (!user) return null;

        // 返回不包含密码的用户信息
        const { password, ...userWithoutPassword } = user;
        return { ...userWithoutPassword, password: '******' };
    }

    /**
     * 验证用户登录
     * @param {string} username 用户名
     * @param {string} password 密码
     * @returns {Object} 登录结果
     */
    function login(username, password) {
        const user = users.find(u => u.username === username && u.password === password);

        if (user) {
            // 更新最后登录时间
            user.lastLoginTime = Date.now();

            // 返回登录成功结果（不包含密码）
            const { password, ...userWithoutPassword } = user;
            return {
                success: true,
                message: '登录成功',
                user: userWithoutPassword
            };
        } else {
            // 返回登录失败结果
            return {
                success: false,
                message: '用户名或密码错误',
                user: null
            };
        }
    }

    /**
     * 添加用户
     * @param {Object} userData 用户数据
     * @returns {Object} 操作结果
     */
    function addUser(userData) {
        // 检查用户名是否已存在
        if (users.some(u => u.username === userData.username)) {
            return { success: false, message: '用户名已存在' };
        }

        // 生成新的ID
        const maxId = Math.max(...users.map(u => u.id), 0);
        const newUser = {
            ...userData,
            id: maxId + 1,
            lastLoginTime: null
        };

        // 添加到用户列表
        users.push(newUser);

        return { success: true, message: '添加用户成功' };
    }

    /**
     * 更新用户
     * @param {Object} userData 用户数据
     * @returns {Object} 操作结果
     */
    function updateUser(userData) {
        const index = users.findIndex(u => u.id === Number(userData.id));

        if (index === -1) {
            return { success: false, message: '用户不存在' };
        }

        // 如果密码字段是占位符，保留原密码
        if (userData.password === '******') {
            userData.password = users[index].password;
        }

        // 更新用户数据
        users[index] = { ...users[index], ...userData };

        return { success: true, message: '更新用户成功' };
    }

    /**
     * 删除用户
     * @param {number} id 用户ID
     * @returns {Object} 操作结果
     */
    function deleteUser(id) {
        const index = users.findIndex(u => u.id === Number(id));

        if (index === -1) {
            return { success: false, message: '用户不存在' };
        }

        // 删除用户
        users.splice(index, 1);

        return { success: true, message: '删除用户成功' };
    }

    // 暴露公共方法
    return {
        getAllUsers,
        getUserById,
        login,
        addUser,
        updateUser,
        deleteUser
    };
})();

// 如果在浏览器环境中，将模块添加到全局对象
if (typeof window !== 'undefined') {
    window.MockUserData = MockUserData;
} 